Transactional Emails হল ইমেইলগুলির একটি ধরনের যা সরাসরি কোনো ব্যবহারকারীর (customer) সাথে সম্পর্কিত একটি ইভেন্টের পর পাঠানো হয়। এই ধরনের ইমেইল সাধারণত অর্ডার কনফার্মেশন, পাসওয়ার্ড রিসেট, ইনভয়েস, অ্যাকাউন্ট অ্যাক্টিভেশন ইত্যাদির জন্য ব্যবহৃত হয়। এই ইমেইলগুলি সাধারণত একমাত্র তথ্যবহুল, যেখানে গ্রাহক বা ব্যবহারকারীকে প্রাসঙ্গিক এবং সময়োচিত তথ্য প্রদান করা হয়।
JavaMail API ব্যবহার করে আপনি Transactional Emails যেমন Order Confirmation বা Password Reset সহজেই পাঠাতে পারেন। এই ধরনের ইমেইল পাঠানোর জন্য, আপনি সাধারণত HTML ইমেইল ব্যবহার করবেন এবং JavaMail API এর মাধ্যমে সেই ইমেইল পাঠাতে পারবেন।
এখানে আমরা Order Confirmation Email পাঠানোর একটি উদাহরণ দেখব। এই ইমেইলটি গ্রাহককে একটি অর্ডারের কনফার্মেশন পাঠাবে।
প্রথমে, আপনাকে JavaMail API সেটআপ করতে হবে, যা Maven বা JAR ফাইল এর মাধ্যমে করা যেতে পারে।
pom.xml (Maven Dependency):
<dependencies>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version> <!-- সর্বশেষ সংস্করণ চেক করুন -->
</dependency>
</dependencies>
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.sql.*;
public class SendTransactionalEmail {
public static void main(String[] args) {
// Step 1: ডেটাবেস থেকে গ্রাহকের তথ্য ফেচ করা
String dbUrl = "jdbc:mysql://localhost:3306/mydatabase";
String dbUser = "root";
String dbPassword = "password";
String orderId = "12345"; // উদাহরণস্বরূপ, অর্ডার আইডি
String customerName = "";
String customerEmail = "";
String orderDate = "";
double totalAmount = 0.0;
try {
// Step 2: ডেটাবেস সংযোগ স্থাপন করা
Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
String query = "SELECT customer_name, email, order_id, order_date, total_amount FROM orders WHERE order_id = ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setString(1, orderId);
ResultSet rs = stmt.executeQuery();
// Step 3: অর্ডার ডেটা রিট্রিভ করা
if (rs.next()) {
customerName = rs.getString("customer_name");
customerEmail = rs.getString("email");
orderDate = rs.getString("order_date");
totalAmount = rs.getDouble("total_amount");
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
// SMTP Server Properties
String host = "smtp.gmail.com";
String username = "your-email@gmail.com";
String password = "your-email-password";
Properties properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
// Create Session
Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create MimeMessage
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(customerEmail));
message.setSubject("Order Confirmation - Order #" + orderId);
// HTML Content for Transactional Email
String htmlContent = "<html><body>"
+ "<h1>Order Confirmation</h1>"
+ "<p>Dear " + customerName + ",</p>"
+ "<p>Thank you for your order! Below are the details of your recent purchase:</p>"
+ "<table>"
+ "<tr><td><strong>Order ID:</strong></td><td>" + orderId + "</td></tr>"
+ "<tr><td><strong>Order Date:</strong></td><td>" + orderDate + "</td></tr>"
+ "<tr><td><strong>Total Amount:</strong></td><td>$" + totalAmount + "</td></tr>"
+ "</table>"
+ "<p>We hope to serve you again soon!</p>"
+ "</body></html>";
// Set the email content
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(htmlContent, "text/html");
// Create a MimeMultipart object
MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
// Set the content of the message to the multipart object
message.setContent(multipart);
// Send the email
Transport.send(message);
System.out.println("Transactional email sent successfully to: " + customerEmail);
} catch (Exception e) {
e.printStackTrace();
}
}
}
PreparedStatement
ব্যবহার করে অর্ডার আইডির মাধ্যমে গ্রাহকের নাম, ইমেইল, অর্ডার তারিখ এবং মোট মূল্য রিট্রিভ করা হচ্ছে।এখন আমরা Password Reset এর উদাহরণ দেখব যেখানে ব্যবহারকারীকে পাসওয়ার্ড রিসেট লিঙ্ক পাঠানো হবে।
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class SendPasswordResetEmail {
public static void main(String[] args) {
// SMTP Server Properties
String host = "smtp.gmail.com";
String username = "your-email@gmail.com";
String password = "your-email-password";
// Session Setup
Properties properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create MimeMessage
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient-email@example.com"));
message.setSubject("Password Reset Request");
// Password Reset Link in HTML format
String htmlContent = "<html><body>"
+ "<h1>Password Reset</h1>"
+ "<p>Click the link below to reset your password:</p>"
+ "<a href='https://yourwebsite.com/reset-password?token=12345'>Reset Password</a>"
+ "</body></html>";
// Set the email content
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(htmlContent, "text/html");
// Create a MimeMultipart object
MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
// Set the content of the message to the multipart object
message.setContent(multipart);
// Send the email
Transport.send(message);
System.out.println("Password reset email sent successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Transactional Emails পাঠানোর জন্য JavaMail API অত্যন্ত কার্যকরী একটি টুল। আপনি গ্রাহকদের Order Confirmation বা Password Reset ইমেইল পাঠানোর সময় HTML কনটেন্ট ব্যবহার করে তাদের আরও বিস্তারিত তথ্য প্রদান করতে পারেন। JavaMail API এর মাধ্যমে SMTP সার্ভার ব্যবহার করে ইমেইল পাঠানো এবং HTML কনটেন্ট তৈরি করা সহজ এবং নিরাপদ।
Read more